﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OVS_SizeCalculation.Manager;
using OVS_VideoRecorder.Manager;
using OVS_TrajectoryCalculation.Manager;
using OVS_NotificationSender.Manager;

namespace OVS_FrontOffice.Manager
{
    public class FrontOfficeManager
    {
        /// <summary>
        /// Logger par défaut du ManagerUtilisateurs
        /// </summary>
        private static readonly log4net.ILog _Log = log4net.LogManager.GetLogger(typeof(FrontOfficeManager));

        #region Gestion du singleton

        /// <summary>
        /// Instance locale pour héberger le singleton
        /// </summary>
        static FrontOfficeManager instance = null;

        /// <summary>
        /// Objet permettant la gestion des LOCK lors de l'instanciation
        /// </summary>
        static readonly object padlock = new object();

        /// <summary>
        /// Constructeur par défaut
        /// </summary>
        FrontOfficeManager()
        {
            if (_Log.IsDebugEnabled)
                _Log.DebugFormat("Nouvelle instance de '{0}'", this.GetType().ToString());

        }

        /// <summary>
        /// Déclaration unique par gestion du singleton
        /// </summary>
        public static FrontOfficeManager Instance
        {
            get
            {
                lock (padlock)
                {
                    if (instance == null)
                    {
                        instance = new FrontOfficeManager();
                    }
                    return instance;
                }
            }
        }

        #endregion Gestion du singleton


        /// <summary>
        /// Registers the event handlers.
        /// </summary>
        public void RegisterEventHandlers()
        {

            // Initialisation Listenner des Managers des modules
            //SizeCalculationManager.Instance.registerEventHandler();

            VideoRecorderManager.Instance.registerEventHandler();

            TrajectoryCalculationManager.Instance.registerEventHandler();

            NotificationSenderManager.Instance.registerEventHandler();


        }


    }
}
